/**
 * @addtogroup canfd_def
 * canfd_def
 * @{
 */
/**
 * @file canfd_def.h
 * @brief CAN通用数据定义
 * @note CAN FD协议取消远程帧
 * @par 修改日志
 * <table>
 * <tr><th>Date <th>Version <th>Author <th>Description
 * <tr><td>2023-03-01 <td>1.0 <td>软件工程院 <td>创建初始版本
 * @copyright 杭州鸿泉物联网技术股份有限公司
 */
#ifndef _CANFD_DEF_H_
#define _CANFD_DEF_H_

#include <ofc_types.h>

#ifdef __cplusplus
extern "C" {
#endif

/**
 * 帧Id类型的枚举
 */
enum TCanfdIdTypeTag
{
    kCanfdIdTypeStd,                ///< 标准ID
    kCanfdIdTypeExt,                ///< 扩展ID
};
typedef enum TCanfdIdTypeTag TCanfdIdType;

/**
 * 收发的CAN数据定义
 * 数据长度的取值范围为0~0x0F, 超过0x08时,代表的含义为:
 * 0x09代表长度12字节, 0x0A代表长度16字节,
 * 0x0B代表长度20字节, 0x0C代表长度24字节,
 * 0x0D代表长度32字节, 0x0E代表长度48字节,
 * 0x0F代表长度64字节
 */
struct TCanfdDataTag
{
    union TCanfdDataParamTag
    {
        unsigned int recv_tick;     ///< 收到数据时的TICK值(仅接收时有效)
        unsigned int data_id;       ///< 数据发送完成或者失败时是否需要调用回调事件来告知.=0为不需要告知;否则为需要告知,data_id唯一标识一个报文
    } param;

    unsigned char bus_index;        ///< CAN设备索引
    unsigned char length;           ///< 数据长度说明参考上方定义
    unsigned char id_type;          ///< TCanfdIdType, 0: 标准帧, 1: 扩展ID
    unsigned char brs;              ///< 0: 普通CAN帧, 1: CAN FD帧
    unsigned int  id;               ///< CANID; 扩展帧ID: Bit28-Bit0; 标准帧: Bit10-Bit0
    unsigned char data[64];         ///< CAN数据
};
typedef struct TCanfdDataTag TCanfdData;

#ifdef __cplusplus
}  // extern "C"
#endif

#endif // _CANFD_DEF_H_
/**
 * @} 
 */
